

import java.util.*;


public class IteratorExample {


	public static BinaryTreeNode buildTree() {
		
		return 	new BinaryTreeNode( "A",
					new BinaryTreeNode( "B", null, null ),
					new BinaryTreeNode( "C",
						new BinaryTreeNode("D",
							new BinaryTreeNode("F", null, null ),
							null ),
						new BinaryTreeNode( "E",
							null,
							new BinaryTreeNode( "G", null, null )
						)
					)
				);

	}

	private static void traverse( Iterator it ) {

		while ( it.hasNext() ) {

			BinaryTreeNode node = (BinaryTreeNode)it.next();
			
			System.out.print( node.getElement() + " " );
		}	
	}


	public static void main(String[] args) {

		BinaryTreeNode tree = buildTree();

		System.out.print( "Pre-Order: ");
		traverse( new PreOrderIterator( tree ) );
		System.out.println("\n");
		
		System.out.print( "Level-Order: ");
		traverse( new LevelOrderIterator( tree ) );
		System.out.println("\n");
	}


}
